trait MyTrait {
  // 特征
  // 类似Java中的抽象类 但是更像接口
  val i: Int = 10

  // 判断相等就返回true，不相等就放回false
  // 这是一个抽象的方法还未具体实现
  def isEqual(int: Int): Boolean

  // 判断不相等就返回true，相等就放回false
  def isNotEqual(int: Int): Boolean = {
    !isEqual(int)
  }

}

trait MyTrait2 {
  // 特征
  // 类似Java中的抽象类 但是更像接口
  val i2: Int = 10

  // 判断相等就返回true，不相等就放回false
  // 这是一个抽象的方法还未具体实现
  def isEqual2(int: Int): Boolean

  // 判断不相等就返回true，相等就放回false
  def isNotEqual2(int: Int): Boolean = {
    !isEqual2(int)
  }

}

class P(id: Int) {
  val _id: Int = id
}

// 在Java中只能继承一个父类 但是可以实现多个接口
// 在Scala中也只能继承一个父类 但是可以with多个特征
class Q(id: Int) extends P(id) with MyTrait with MyTrait2 {
  override def isEqual(int: Int): Boolean = {
    _id == int
  }

  override def isEqual2(int: Int): Boolean = {
    _id == int
  }
}

object Demo19Trait {
  def main(args: Array[String]): Unit = {
    val q: Q = new Q(20)
    println(q.i)
    println(q._id)
    println(q.isEqual(20))
    println(q.isNotEqual(20))
    println(q.isEqual(10))
    println(q.isNotEqual(10))

  }
}
